﻿#ifndef SKY_COMMON_H
#define SKY_COMMON_H

#include "Config.h"

// 如果必须将位于下面指定平台之前的平台作为目标，请修改下列定义。
// 有关不同平台对应值的最新信息，请参考 MSDN。
#ifndef WINVER				// 允许使用特定于 Windows XP 或更高版本的功能。
#define WINVER 0x0501		// 将此值更改为相应的值，以适用于 Windows 的其他版本。
#endif

#ifndef _WIN32_WINNT		// 允许使用特定于 Windows XP 或更高版本的功能。
#define _WIN32_WINNT 0x0501	// 将此值更改为相应的值，以适用于 Windows 的其他版本。
#endif

#ifndef _WIN32_WINDOWS		// 允许使用特定于 Windows 98 或更高版本的功能。
#define _WIN32_WINDOWS 0x0410 // 将此值更改为适当的值，以指定将 Windows Me 或更高版本作为目标。
#endif

#ifndef _WIN32_IE			// 允许使用特定于 IE 6.0 或更高版本的功能。
#define _WIN32_IE 0x0600	// 将此值更改为相应的值，以适用于 IE 的其他版本。
#endif

#define WIN32_LEAN_AND_MEAN  // 1. 从 Windows 头中排除极少使用的资料 2. 解决include <windows.h> 比 <WinSock2.h> 前导致报重复定义的错误问题

// 包含常用的stl库
#include <algorithm>
#include <string>
#include <vector>
#include <list>
#include <queue>
#include <map>
#include <set>
#include <hash_map>

// Windows 头文件:
#include <windows.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <crtdbg.h>
#include <tchar.h>
#include <assert.h>
#include <WinSock2.h>
#pragma comment(lib, "Ws2_32.lib")
#pragma comment(lib, "Mswsock.lib")

// 模块的配置后缀
#define CFG_SUFFIX ""

// 动态库前后缀
#define DLL_PREFIX ""
#define DLL_SUFFIX ".dll"

// 组合库文件名
#define MAKE_DLL_NAME(module)           "./"DLL_PREFIX#module""CFG_SUFFIX""DLL_SUFFIX
#define	MAKE_LIB_NAME(module)           "lib"#module""CFG_SUFFIX
#define MAKE_DLL_LIB_NAME(module)       #module""CFG_SUFFIX

// 导入导出标志
#ifdef _LIB
#   define CLASS_EXPORT
#   define CLASS_IMPORT
#   define API_EXPORT   extern "C"
#   define API_IMPORT   extern "C"
#else
#   define CLASS_EXPORT __declspec(dllexport)
#   define CLASS_IMPORT __declspec(dllimport)
#   define API_EXPORT   extern "C"  __declspec(dllexport)
#   define API_IMPORT   extern "C"  __declspec(dllimport)
#endif

#if defined(BASE_STATIC_LIB)
#   define SKY_EXPORT
#   define SKY_API  extern "C"
#   pragma comment(lib, MAKE_LIB_NAME(Base))
#elif defined(BASE_STATIC_LIB_MD)
#   define SKY_EXPORT
#   define SKY_API  extern "C"
#   pragma comment(lib,"libBase_md.lib")
#elif defined(BASE_EXPORTS)
#   define SKY_EXPORT  __declspec(dllexport)
#   define SKY_API  extern "C" __declspec(dllexport)
#else
#   define SKY_EXPORT  __declspec(dllimport)
#   define SKY_API  extern "C" __declspec(dllimport)
#   pragma comment(lib, MAKE_DLL_LIB_NAME(Base))
#endif

#define SKY_CDECL   __cdecl

#ifndef SKY_STDCALL
#   define SKY_STDCALL  __stdcall
#endif

#endif //RKT_COMMON_H
